Technote 1123
Start Manager Extension Table Mechanism
äÓëbäTîO
Mac OS 8.1 à»ëOÇÕÅAÉVÉXÉeÉÄã@î\ägí£ÇÕ 3 ǬÇÃÉtÉHÉãÉ_Ç©ÇÁèáÇ…ÉçÅ[Éh/é¿çsÇ≥ÇÍǃǢNjǵÇΩÅB3 ǬÇÃÉtÉHÉãÉ_ÇΔÇÕÅAã@î\ägí£ÉtÉHÉãÉ_ÅAÉRÉìÉgÉçÅ[ÉãÉpÉlÉãÉtÉHÉãÉ_ÅAÉVÉXÉeÉÄÉtÉHÉãÉ_Ç≈Ç∑ÅBäeÉtÉHÉãÉ_ì‡ÇÃÉVÉXÉeÉÄã@î\ägí£ÇÕÅAÉfÉBÉXÉNÇ…ãLò^Ç≥ÇÍǃǢÇÈèáèòÇ≈ÉçÅ[Éh/é¿çsÇ≥ÇÍǃǢNjǵÇΩÅBHFS É{ÉäÉÖÅ[ÉÄ (Mac OS ïWèÄå`éÆ) Ç≈ÇÕÅAÉAÉCÉeÉÄñºÇÕ ASCII ï∂éöÇ≈ï€ë∂Ç≥ÇÍÇÈÇΩÇflÅAÉAÉCÉeÉÄÇÕ RelString èáÇ…ÉJÉ^ÉçÉOÉtÉ@ÉCÉãÇ…ï€ë∂Ç≥ÇÍÇ‹Ç∑ÅBǬNjÇËÅARelString ä÷êîÇégǡǃÉ\Å[ÉgÇ≥ÇÍǃǢNjÇ∑ÅBÉtÉ@ÉCÉãÉ}ÉlÅ[ÉWÉÉÇà GetFInfo ÉãÅ[É`ÉìÇ™ RelString ÇÃèáÇ…ÉtÉ@ÉCÉãÇï‘Ç∑ÇÃÇÕDZÇÃÇΩÇflÇ≈Ç∑ÅB
Mac OS 8.1 Ç™ì±ì¸Ç≥ÇÍǃÅAêVǵǢÉuÅ[ÉgÉfÉBÉXÉNå`éÆÅAHFS Plus (Mac OS ägí£å`éÆ) Ç™ìoèÍǵNjǵÇΩÅBHFS Plus É{ÉäÉÖÅ[ÉÄÇ≈ÇÕÅAÉAÉCÉeÉÄñºÇÕ ASCII ï∂éöÇ≈ÇÕÇ»Ç≠ÅAÉÜÉjÉRÅ[Éhå`éÆÇ≈ï€ë∂Ç≥ÇÍÇÈÇΩÇflÅAHFS É{ÉäÉÖÅ[ÉÄÇΔÇÕà·Ç§èáèòÇ≈ÉJÉ^ÉçÉOÉtÉ@ÉCÉãÇ…ÉAÉCÉeÉÄÇ™ï€ë∂Ç≥ÇÍÇ‹Ç∑ÅBHFS Plus É{ÉäÉÖÅ[ÉÄÇ≈ÇÃÉ\Å[ÉgèáÇÃè⁄ç◊DžǬǢǃÇÕÅAHFS Plus É{ÉäÉÖÅ[ÉÄå`éÆÇ…ǬǢǃÇÃÉhÉLÉÖÉÅÉìÉgÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
íçà”:
ÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕÅAÉtÉ@ÉCÉãÇ™É{ÉäÉÖÅ[ÉÄè„Ç≈àÍíËÇÃèáèòÇ…ï€ë∂Ç≥ÇÍÇÈDZÇΔÇdžǃDžǵǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅBÉ{ÉäÉÖÅ[ÉÄå`éÆÇ™à·Ç¶ÇŒÉAÉCÉeÉÄÇÃÉ\Å[ÉgèáLJà·Ç§â¬î\ê´Ç™Ç†ÇËÅAëSÇ≠É\Å[ÉgÇ≥ÇÍǃǢǻǢèÍçáÇ≥ǶdžÇÈÇ©ÇÁÇ≈Ç∑ÅB |
Roman ÉXÉNÉäÉvÉgÉVÉXÉeÉÄÇégópǵǃǢÇÈÉVÉXÉeÉÄÇ≈ÇÕÅAGetFInfo Ç™ï‘Ç∑ HFS Plus É{ÉäÉÖÅ[ÉÄÇÃÉtÉ@ÉCÉãÇÃèáèòÇÕ RelString ÇΔÇŸÇ⁄ìØÇ∂Ç≈Ç∑ (äÆëSÇ…ìØÇ∂Ç≈ÇÕdžÇËÇ‹ÇπÇÒ)ÅBǵǩǵÅAîÒ Roman ÉXÉNÉäÉvÉgÉVÉXÉeÉÄÇégópÇ∑ÇÈÉVÉXÉeÉÄÇ≈ÇÕÅAGetFInfo ÇÕëSÇ≠à·Ç¡ÇΩèáèòÇ≈ÉtÉ@ÉCÉãÇï‘Ç∑èÍçáǙdžÇËÇ‹Ç∑ÅB
íçà”:
ÉAÉbÉvÉãÉRÉìÉsÉÖÅ[É^ÇÕÅAÉVÉXÉeÉÄã@î\ägí£ÇÉçÅ[ÉhÇ∑ÇÈèáèòÇ…ÇÕàÀë∂ǵǻǢÇÊǧDžèÌÇ…åƒÇ—Ç©ÇØÇƒÇ´Ç‹ÇµÇΩÅBǵǩǵÅAé¿ç€Ç…ÇÕàÍíËÇÃèáèòÇ≈ÉçÅ[ÉhÇ∑ÇÈïKóvǙdžÇÈÉVÉXÉeÉÄã@î\ägí£Ç™ÇΩÇ≠Ç≥ÇÒdžÇËÇ‹Ç∑ÅB |
ÉÜÅ[ÉUÇ™ç¨óêǵǻǢÇÊǧDžÅAÉ{ÉäÉÖÅ[ÉÄå`éÆÇ‚égópǵǃǢÇÈÉXÉNÉäÉvÉgÉVÉXÉeÉÄÇ…ä÷åWÇ»Ç≠ÅAÉVÉXÉeÉÄã@î\ägí£Ç™ïKÇ∏ìØÇ∂èáèòÇ≈ÉçÅ[Éh/é¿çsÇ≥ÇÍÇÈÇÊǧDžÇ∑ÇÈÇΩÇflÅAÉVÉXÉeÉÄã@î\ägí£ÇÃédëgÇ™ÅAÉeÅ[ÉuÉãÇégópÇ∑ÇÈÇÊǧDžâ¸í˘Ç≥ÇÍNjǵÇΩÅBÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕÅAäeÉtÉHÉãÉ_ÇÃÉVÉXÉeÉÄã@î\ägí£Ç RelString Ç≈É\Å[Égǵǃ 1 â”èäÇ…î[ÇflÇΩÅAÉeÅ[ÉuÉãÇç\ízǵNjÇ∑ÅBǪǵǃÅAäeÉVÉXÉeÉÄã@î\ägí£ÇÕÉeÅ[ÉuÉãÇÃèáèòÇ≈ÉçÅ[Éh/é¿çsÇ≥ÇÍÇ‹Ç∑ÅBǪÇÃåãâ ÅAÉVÉXÉeÉÄǙǫÇÃå`éÆÇÃÉ{ÉäÉÖÅ[ÉÄÇ©ÇÁÉuÅ[ÉgÇ≥ÇÍǃLJÅAÇ«ÇÒÇ»ÉXÉNÉäÉvÉgÉVÉXÉeÉÄÇégópǵǃǢǃLJÅAèÌÇ…ìØÇ∂èáèòÇ≈ÉVÉXÉeÉÄã@î\ägí£Ç™ÉçÅ[Éh/é¿çsÇ≥ÇÍÇÈÇÃÇ≈Ç∑ÅB
ÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕÅAëºÇÃÉvÉçÉOÉâÉÄÇ™ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éhã@ç\Ç…ÉAÉNÉZÉXÇ≈Ç´ÇÈÇÊǧâ¸í˘Ç≥ÇÍNjǵÇΩÅBÉvÉçÉOÉâÉÄÇ≈ÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsèàóùÇÃäƒéãÇ‹ÇΩÇÕêßå‰Ç™â¬î\Ç…Ç»ÇËNjǵÇΩÅB
äƒéãÇΔêßå‰
ÉvÉçÉOÉâÉÄÇÕ ExtensionNotificationProc ÇÉCÉìÉXÉgÅ[ÉãǵǃÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèàóùÇäƒéãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBå¬ÅXÇà ExtensionNotificationProc Ç™åƒÇ—èoÇ≥ÇÍÇÈÇÃÇÕÅAç≈èâÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëOÅAäeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃëOå„óºï˚ÅAç≈å„ÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„Ç≈Ç∑ÅBã@î\ägí£í ímÉãÅ[É`ÉìÇ≈ÇÕÅAåƒÇ—èoǵÇÃç€Ç…ÅAÉAÉCÉRÉìÇÃï`âÊÅAÉTÉEÉìÉhÇÃçƒê∂ÅAÉVÉXÉeÉÄã@î\ägí£ñºÇÃï\é¶Ç»Ç«Ç≥NjǥNjǻèàóùÇçsǧDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÉçÅ[ÉhíÜÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃñºëOÇÉtÉ@ÉCÉãÇ…ï€ë∂ǵǃÅAÉNÉâÉbÉVÉÖÇ∑ÇÈÉVÉXÉeÉÄã@î\ägí£ÇÉfÉoÉbÉOǵǂÇ∑Ç≠Ç∑ÇÈDZÇΔÇ‚ÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèáÇãLò^Ç∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBExtensionNotificationProc ÇÕÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃèáèòÇïœçXÇ∑ÇÈDZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅBExtensionNotificationProcs ÇÕÇ¢Ç≠ǬÇ≈LJÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
ÉvÉçÉOÉâÉÄÇÕ ExtensionTableHandlerProc ÇÉCÉìÉXÉgÅ[ÉãǵǃÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèàóùÇêßå‰Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBå¬ÅXÇà ExtensionNotificationProc Ç™åƒÇ—èoÇ≥ÇÍÇÈÇÃÇÕÅAç≈èâÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëOÅAäeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃëOå„óºï˚ÅAç≈å„ÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„Ç≈Ç∑ÅBExtensionNotificationProc ÇΔÇÕà·Ç¢ÅAExtensionTableHandlerProc Ç…ÇÕã@î\ägí£ÉeÅ[ÉuÉãÇÃèäóLå†Ç™ó^ǶÇÁÇÍÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃèáèòÇäÆëSÇ…êßå‰Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBExtensionTableHandlerProc ÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈÉvÉçÉOÉâÉÄÇÕÅAì¡íËÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇã÷é~ǵÇΩÇËÅAÉfÉtÉHÉãÉgà»äOÇÃÉtÉHÉãÉ_Ç©ÇÁÉVÉXÉeÉÄã@î\ägí£ÇÉçÅ[ÉhÇ∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBÉCÉìÉXÉgÅ[ÉãÇ≈Ç´ÇÈ ExtensionTableHandlerProc ÇÕ 1 Ç¬ÇæÇØÇ≈Ç∑ÅB
ExtensionTableHandlerProc Ç™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢǻǢÇΔÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕÉfÉtÉHÉãÉgÇÃã@î\ägí£ÉeÅ[ÉuÉãÉnÉìÉhÉâÇégópǵNjÇ∑ÅBDZÇÃÉfÉtÉHÉãÉgã@î\ägí£ÉeÅ[ÉuÉãÉnÉìÉhÉâÇÕëOÉoÅ[ÉWÉáÉìÇà Mac OS ÇÃÉtÉ@ÉCÉãÉ}ÉlÅ[ÉWÉÉÇÃÇÊǧǻìÆçÏÇǵNjÇ∑ (ó·Ç¶ÇŒÅAã@î\ägí£ÉeÅ[ÉuÉãÇÃç\ízÇ…égópǵÇΩÉtÉHÉãÉ_ÇÃì‡óeÇ™ïœÇÌÇÈÇΔÅAã@î\ägí£ÉeÅ[ÉuÉãÇçƒç\ízǵÅAdžÇΩǩLJǪDZÇ≈ÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ™ GetFInfo ÇåƒÇ—èoǵÇΩÇÊǧDžé¿çsÇ™çƒäJÇ≥ÇÍÇ‹Ç∑)ÅB
íçà”:
ExtensionNotificationProc ÇΔ ExtensionTableHandlerProc ÇÕãNìÆéûÇÃÇ«ÇÃéûì_Ç≈Ç≈LJÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´ÅAǪÇÍà»ç~ÉÅÉbÉZÅ[ÉWÇéÛÇØéÊÇËÇ‹Ç∑ÅBExtensionTableHandlerProc ÇÃèÍçáÇÕÅAÇ‹ÇæÉCÉìÉXÉgÅ[ÉãÇ™çœÇÒÇ≈ǢǻǢÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇêßå‰Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB |
ã@î\ägí£ÉeÅ[ÉuÉã
ã@î\ägí£ÉeÅ[ÉuÉãÇÕÉVÉXÉeÉÄÉqÅ[ÉvíÜÇÃçƒäÑÇËìñǃâ¬î\ÉuÉçÉbÉNÇ≈ÅAExtensionTable ç\ë¢ëÃÇ™ì¸Ç¡ÇƒÇ¢Ç‹Ç∑ÅBExtensionTable ÇÕÅAExtensionTableHeader ÇΔǪÇÍÇ…ë±Ç≠ ExtensionElements ÇÃîzóÒÇ≈ç\ê¨Ç≥ÇÍÇ‹Ç∑ÅBExtensionTableHeader Ç…ÇÕÅAExtensionTable Ç®ÇÊÇ— ExtensionElements ÉåÉRÅ[ÉhÇÃÉoÅ[ÉWÉáÉìÇï\Ç∑ÉtÉBÅ[ÉãÉhÅAåªç›ÉçÅ[Éh/é¿çsíÜÇÃÉVÉXÉeÉÄã@î\ägí£Ç…ëŒâûÇ∑ÇÈ ExtensionElements ÇÃÉCÉìÉfÉbÉNÉXÅAExtensionElements ÇÃÉTÉCÉYÅAÉeÅ[ÉuÉãíÜÇà ExtensionElements ÇÃå¬êîÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅBExtensionTable ÇÃäe ExtensionElements Ç…ÇÕÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ…ÇÊǡǃÉçÅ[Éh/é¿çsÇ≥ÇÍÇÈÉVÉXÉeÉÄã@î\ägí£ÇéØï Ç∑ÇÈèÓïÒÇ™ì¸Ç¡ÇƒÇ¢Ç‹Ç∑ÅB
ÉCÉìÉXÉgÅ[ÉãçœÇ›ÇÃå¬ÅXÇà ExtensionNotificationProc Ç…ÇÕÅAåªç›ÉçÅ[Éh/é¿çsíÜÇÃÉVÉXÉeÉÄã@î\ägí£Ç…ëŒâûÇ∑ÇÈ ExtensionElements ÇÃÉRÉsÅ[Ç™ìnÇ≥ÇÍÇ‹Ç∑ÅB
ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèàóùÇêßå‰Ç∑ÇÈ ExtensionTableHandlerProc Ç…ÇÕÅAåƒÇ—èoǵÇÃìxÇ…ñàâÒ ExtensionTable Ç™ìnÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÉnÉìÉhÉâÇÕÅAExtensionTable ÇïœçXǵǃÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhÇêßå‰ÇµÇ‹Ç∑ÅB
ÉuÅ[Égèàóù
ÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕÅAÉuÅ[ÉgèàóùÇÃëÅÇ¢éûä˙Ç… (MacsBug ÇÃÉçÅ[Éhå„ÅAǵǩǵ MacsBug Çà dcmdSecondaryINIT éûÇÊÇËëO)ÅAExtensionTableHandlerProc ÇΔ ExtensionNotificationProc ÇÃÉCÉìÉXÉgÅ[ÉãÇΔçÌèúÇçsǧÇΩÇflÇà API ÇÉCÉìÉXÉgÅ[ÉãǵNjÇ∑ÅB
ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëOÇ…ÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕã@î\ägí£ÉeÅ[ÉuÉãÇçÏê¨ÇµÇ‹Ç∑ÅB
ç≈èâÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëOÇ…ÅAExtensionTableHandlerProc ÇΔäe ExtensionNotificationProc ÇÕÅAÉVÉXÉeÉÄã@î\ägí£åQÇÃÉçÅ[ÉhèàóùÇÃäJénÇímÇÁÇπÇÈ extNotificationBeforeFirst ÉÅÉbÉZÅ[ÉWÇΔÇΔLJDžåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBextNotificationBeforeFirst ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈ ExtensionTableHandlerProc ÇÕÅAÇ«Çà ExtensionNotificationProc ÇÊÇËLJëOÇ…åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
ǪÇÃå„ÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇÕã@î\ägí£ÉeÅ[ÉuÉãÇÃèáèòDžǵÇΩǙǡǃäeÉVÉXÉeÉÄã@î\ägí£ÇÉçÅ[Éh/é¿çsǵNjÇ∑ÅBǪÇÍǺÇÍÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëOÇ…ÅAExtensionTableHandlerProc ÇΔÇ∑Ç◊ǃÇà ExtensionNotificationProc ÇÕÅAextNotificationBeforeCurrent ÉÅÉbÉZÅ[ÉWÇΔÇΔLJDžåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBäeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„Ç…ÇÕÅAÇ∑Ç◊ǃÇà ExtensionNotificationProc ÇΔ ExtensionTableHandlerProc Ç™ extNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇΔÇΔLJDžåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBextNotificationBeforeCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈ ExtensionTableHandlerProc ÇÕÅAÇ«Çà ExtensionNotificationProc ÇÊÇËLJëOÇ…åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBextNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈ ExtensionTableHandlerProc ÇÕÅAÇ«Çà ExtensionNotificationProc ÇÊÇËLJå„Ç…åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
Ç∑Ç◊ǃÇÃÉVÉXÉeÉÄã@î\ägí£Ç™ÉçÅ[ÉhÇ≥ÇÍÇΩå„ÅAÇ∑Ç◊ǃÇà ExtensionNotificationProc ÇΔ ExtensionTableHandlerProc Ç™ÅAÉVÉXÉeÉÄã@î\ägí£åQÇÃÉçÅ[ÉhèàóùÇÃäÆóπÇímÇÁÇπÇÈ extNotificationAfterLast ÉÅÉbÉZÅ[ÉWÇΔÇΔLJDžåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBextNotificationAfterLast ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈ ExtensionTableHandlerProc ÇÕÅAç≈å„Çà ExtensionNotificationProc ÇÃå„Ç…åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
Ç¢Ç∏ÇÍÇÃèÍçáLJÅAExtensionNotificationProc ǫǧǵÇÃåƒÇ—èoǵÇÃëäëŒìIÇ»èáèòÇÕñ¢íËã`Ç≈Ç∑ÅB
ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃäƒéã
INITÅAÇ‹ÇΩÇÕÉVÉXÉeÉÄã@î\ägí£Ç™ÉçÅ[ÉhÇ≥ÇÍÇÈëOÇ…é¿çsÇ≥ÇÍÇÈÉvÉçÉOÉâÉÄÇÕÅAInstallExtensionNotificationProc ÇåƒÇ—èoǵǃ ExtensionNotificationProc ÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ≈ÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèàóùÇäƒéãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBDZÇÃÉnÉìÉhÉâÇÕÉCÉìÉXÉgÅ[Éãå„ÅAéüÇÃéûì_Ç≈åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
* ç≈èâÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëO (ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsèàóùÇÃäJénëOÇ…ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇΩèÍçá)
* äeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëO
* äeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„
* ç≈å„ÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„
ExtensionNotificationProc ÇÕÅAåªç›ÉçÅ[ÉhíÜÇÃÉVÉXÉeÉÄã@î\ägí£Ç…ëŒâûÇ∑ÇÈ ExtensionElement ÇÃÉRÉsÅ[Ç÷ÇÃÉ|ÉCÉìÉ^ÅAExtensionElementPtr ÇéÛÇØéÊÇËÇ‹Ç∑ÅB
íçà”:
ExtensionElement ÇÃÉfÅ[É^ÇÕì«Ç›çûÇ›êÍópÇ≈Ç∑ÅBïœçXÇâ¡Ç¶ÇƒÇ‡ÅAExtensionElement ÇÃÉRÉsÅ[ÇïœçXǵǃǢÇÈÇ…Ç∑ǨNjÇπÇÒÅBExtensionNotificationProc ÇÃñflÇËÇ≈ïœçXÇÕîjä¸Ç≥ÇÍÇ‹Ç∑ÅB |
ExtensionNotificationProc ÇÕÇ¢Ç≠ǬÇ≈LJÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃêßå‰
INITÅAÇ‹ÇΩÇÕÉVÉXÉeÉÄã@î\ägí£Ç™ÉçÅ[ÉhÇ≥ÇÍÇÈëOÇ…é¿çsÇ≥ÇÍÇÈÉvÉçÉOÉâÉÄÇÕÅAInstallExtensionTableHandlerProc ÇåƒÇ—èoǵǃ ExtensionTableHandlerProc ÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ≈ÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèàóùÇÃêßå‰ÇçsǧDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBExtensionTableHandlerProc ÇÕÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ™çÏê¨ÇµÇΩÉfÉtÉHÉãÉgÇà ExtensionTable Çï‘ǵNjÇ∑ÅB
ÉCÉìÉXÉgÅ[Éãâ¬î\Ç» ExtensionTableHandlerProc ÇÕ 1 Ç¬ÇæÇØÇ≈Ç∑ÅB
ǢǡÇΩÇÒÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇΩÇÁÅAExtensionTableHandlerProc ÇÕÅAExtensionTable Ç…ëŒÇ∑ÇÈÇ∑Ç◊ǃÇÃïœçXÇçsǧê”îCǙdžÇËÇ‹Ç∑ÅBǵǩǵÅAå¬ÅXÇÃÉVÉXÉeÉÄã@î\ägí£ÇÉçÅ[ÉhÇ∑ÇÈä‘Ç… extElementIndex ÉtÉBÅ[ÉãÉhÇëùâ¡Ç≥ÇπÇÈDZÇΔÇæÇØÇÕïsóvÇ≈Ç∑ÅBExtensionTableHandlerProc ÇÃÉCÉìÉXÉgÅ[Éãå„ÇÕÅAÉVÉXÉeÉÄÇÃÉfÉtÉHÉãÉgã@î\ägí£ÉeÅ[ÉuÉãÉnÉìÉhÉâÇÕàÍêÿ ExtensionTable Çä«óùǵNjÇπÇÒÅB
ExtensionTableHandlerProc ÇÕÉCÉìÉXÉgÅ[Éãå„ÅAéüÇÃèÍçáÇ…åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
* ç≈èâÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëO (ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsèàóùÇÃäJénëOÇ…ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇΩèÍçá)
* äeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsëO
* äeÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„
* ç≈å„ÇÃÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çså„
ExtensionTableHandlerProc ÇΔà·Ç¢ÅAExtensionTableHandlerProc ÇÕÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ™égópÇ∑ÇÈÅAExtensionTable Ç÷ÇÃÉnÉìÉhÉãÇéÛÇØéÊÇËÇ‹Ç∑ÅBDZÇÍÇÕÉRÉsÅ[Ç≈ÇÕdžÇËÇ‹ÇπÇÒÅB
íçà”:
ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇΩ ExtensionTableHandlerProc Ç™ ExtensionTable ÇïœçXÇ∑ÇÈÇ©ÅAExtensionTable Ç≈êßå‰Ç≥ÇÍǃǢÇÈÉtÉHÉãÉ_ÇÃì‡óeÇ™ïœçXÇ≥ÇÍÇÈÇΔÅAÉnÉìÉhÉâÇçÌèúÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç»Ç≠Ç»ÇËÇ‹Ç∑ÅBDZǧǵÇΩïœçXÇÃå„Ç≈ RemoveExtensionTableHandlerProc ÇåƒÇ—èoÇ∑ÇΔÅAparamErr ÉGÉâÅ[Ç™ï‘Ç≥ÇÍÇ‹Ç∑ÅB |
ExtensionTable Çà extElementIndex ÉtÉBÅ[ÉãÉhÇÕÅAExtensionTableHandlerProc Ç™ extNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇΩÇ∑ÇÆå„Ç…ÅAñàâÒéüÇà ExtensionElement ÇéwÇ∑ÇÊǧÉCÉìÉfÉbÉNÉXÇÃílÇ™çXêVÇ≥ÇÍÇ‹Ç∑ÅB
åxçê:
ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhÇêßå‰ÇµÇƒÇ¢ÇÈèÍçáÅAExtensionElement ÇéwÇ∑ ExtensionTable.extElements[extElementIndex] ÇÃílÇïœçXÇ∑ÇÈà¿ëSÇ»É^ÉCÉ~ÉìÉOÇÕÅAExtensionTableHandlerProc Ç™ extNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÇæÇØÇ≈Ç∑ÅBëºÇÃÉ^ÉCÉ~ÉìÉOÇ≈ ExtensionTable Ç‚ extElementIndex ÇïœçXǵǃLJǩNjǢNjÇπÇÒÇ™ÅAǪÇÃèÍçáÇÕÅAExtensionTable.extElements[extElementIndex] Ç™ìØÇ∂ ExtensionElement ÇéwÇ∑ÇÊǧíçà”ÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB |
ÉäÉtÉ@ÉåÉìÉX - ã@î\ägí£ÉeÅ[ÉuÉãÉ}ÉlÅ[ÉWÉÉ
DZÇÃÉZÉNÉVÉáÉìÇ≈ÇÕÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhèàóùÇΔé¿çsèàóùÇäƒéãÇ‹ÇΩÇÕêßå‰Ç∑ÇÈÇΩÇflÇ…égópÇ∑ÇÈÉeÉNÉjÉbÉNÇê‡ñæÇµÇ‹Ç∑ÅB
ã@î\ägí£ÉeÅ[ÉuÉãÇÃÉoÅ[ÉWÉáÉì (Gestalt)
ã@î\ägí£ÉeÅ[ÉuÉãã@ç\ÇóòópÇ∑ÇÈÉnÉìÉhÉâÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈëOÇ…ÅAgestaltExtensionTableVersion ÉZÉåÉNÉ^Çégǡǃ Gestalt ÇåƒÇ—èoǵÅAåªç›ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈ ExtensionTable ÇÃÉoÅ[ÉWÉáÉìÇí≤Ç◊Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
enum {
gestaltExtensionTableVersion = FOUR_CHAR_CODE('etbl') /* ExtensionTable ÇÃÉoÅ[ÉWÉáÉì */
};
åªç› (Mac OS 8.1) Çà ExtensionTable ÇÃÉoÅ[ÉWÉáÉìÇÕ 1.0.0 Ç≈Ç∑ÅB
enum {
kExtensionTableVersion = 0x00000100 /* ExtensionTable ÇÃåªçsÉoÅ[ÉWÉáÉì (1.0.0) */};
gestaltExtensionTableVersion Ç™ñ¢íËã`ÇæÇΔÅAã@î\ägí£ÉeÅ[ÉuÉãã@ç\Ç™ë∂ç›ÇπÇ∏ÅAä÷òAÇÃã@î\ägí£ÉeÅ[ÉuÉãÉãÅ[É`ÉìLJñ¢íËã`Ç≈džÇÈDZÇΔÇé¶ÇµÇ‹Ç∑ÅB
kExtensionTableVersion ÇΔÅAgestaltExtensionTableVersion Ç©ï‘Ç∑ílÇÃÉÅÉWÉÉÅ[ÉoÅ[ÉWÉáÉìî‘çÜÇ™àŸÇ»ÇÈèÍçáÅAǪÇÍÇÕã@î\ägí£ÉeÅ[ÉuÉãã@ç\Ç™ëÂïùÇ…ïœçXÇ≥ÇÍǃǢÇÈDZÇΔÇé¶ÇµÇƒÇ®ÇËÅAêVǵǢÉÅÉWÉÉÅ[ÉoÅ[ÉWÉáÉìÇîFímǵǻǢÉRÅ[ÉhÇ™ã@î\ägí£ÉeÅ[ÉuÉãã@ç\ÇóòópǵǃÇÕÇ»ÇËÇ‹ÇπÇÒÅB
kExtensionTableVersion ÇÃÉ}ÉCÉiÅ[ÉoÅ[ÉWÉáÉìî‘çÜÇ™ïœÇÌǡǃǢÇÈèÍçáÇÕÅAExtensionElement ç\ë¢ëÃÇÃíËã`ÇÕägí£Ç≥ÇÍǃǢÇÈÇ™ÅAǪÇÍà»ëOÇÃÉ}ÉCÉiÅ[ÉoÅ[ÉWÉáÉìÇà kExtensionTableVersion Ç≈íËã`Ç≥ÇÍÇΩÉtÉBÅ[ÉãÉhÇ…ÇÕïœçXǙǻǢDZÇΔÇé¶ÇµÇ‹Ç∑ÅB
ExtensionTable ç\ë¢ëÃ
ExtensionTable ÇÕÅAExtensionTableHeader ÇΔǪÇÍÇ…ë±Ç≠ ExtensionElements ÇÃîzóÒÇ≈Ç∑ÅBDZÇÃç\ë¢ëÃÇÕÅAÉuÅ[ÉgéûÇ…ÅAã@î\ägí£ÉeÅ[ÉuÉãã@ç\Ç™ÅAÉçÅ[Éh/é¿çsÇÃëŒè€ÇΔÇ»ÇÈÉVÉXÉeÉÄã@î\ägí£ÇÉXÉLÉÉÉìǵǃç\ízǵNjÇ∑ÅB
struct ExtensionTable {
ExtensionTableHeader extTableHeader; /* ExtensionTable ÇÃÉwÉbÉ_ */ ExtensionElement extElements[1]; /* ÉçÅ[ÉhÇ∑ÇÈå¬ÅXÇÃã@î\ägí£Çï\Ç∑óvëf */};
typedef struct ExtensionTable ExtensionTable;
typedef ExtensionTable * ExtensionTablePtr;
typedef ExtensionTablePtr * ExtensionTableHandle;
ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇΩ ExtensionTableHandlerProc Ç…ÇÕÅAåƒÇ—èoǵéûÇ…ÅAåªç›Çà ExtensionTable Çä‹Çfi ExtensionTableHandle Ç™ÉpÉâÉÅÅ[É^ÇΔǵǃìnÇ≥ÇÍÇ‹Ç∑ÅB
ExtensionTableHeader ç\ë¢ëÃ
ExtensionTable ÇÕ ExtensionTableHeader Ç≈énÇ‹ÇËÇ‹Ç∑ÅB
struct ExtensionTableHeader {
UInt32 extTableHeaderSize;
UInt32 extTableVersion;
UInt32 extElementIndex;
UInt32 extElementSize;
UInt32 extElementCount;
};
typedef struct ExtensionTableHeader ExtensionTableHeader;
extTableHeaderSize |
ExtensionTableHeader ÇÃÉTÉCÉYÅBoffsetof(ExtensionTable,extElements[0]) Ç…ìôǵǢ |
extTableVersion |
ExtensionTable ÇÃåªçsÉoÅ[ÉWÉáÉìÅBgestaltExtensionTableVersion Gestalt ÉZÉåÉNÉ^Ç™ï‘Ç∑ílÇΔìØÇ∂ |
extElementIndex |
ExtensionElement[] ÇÃåªç›ÇÃÉCÉìÉfÉbÉNÉX (ç≈èâÇÃóvëfÇÕÉ[Éç)ÅBäeÉVÉXÉeÉÄã@î\ägí£Ç™ÉçÅ[Éh/é¿çsÇ≥ÇÍÇΩå„Ç…ÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ…ÇÊǡǃëùÇ‚Ç≥ÇÍÇÈ |
extElementSize |
DZÇÃÉoÅ[ÉWÉáÉìÇà ExtensionTable Çà ExtensionElements ÇÃÉTÉCÉY |
extElementCount |
ExtensionTable ì‡Çà ExtensionElement ÉåÉRÅ[ÉhÇÃå¬êî |
ExtensionTableHandlerProc ÇÕ extTableVersion ÉtÉBÅ[ÉãÉhÇÃÉ}ÉCÉiÅ[ÉoÅ[ÉWÉáÉìÇÉ`ÉFÉbÉNÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBExtensionTableHandlerProc Ç™èëÇ©ÇÍÇΩå„DžDZÇÍÇ™ïœçXÇ≥ÇÍǃǢÇÈÇΔÅAextElementSize ÇÃílÇ™ëÂÇ´Ç≠ǻǡǃǢÇÈǩLJǵÇÍÇ‹ÇπÇÒÅBExtensionTableHandlerProc Ç™ÉeÅ[ÉuÉãì‡ÇÃóvëfÇà⁄ìÆÇ‹ÇΩÇÕçÌèúÇ∑ÇÈÇæÇØÇÃLJÇÃÇ»ÇÁÅAé¿çsÇë±ÇØÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBǵǩǵÅAêVǵǢóvëfÇçÏê¨Ç∑ÇÈLJÇÃÇ≈džÇÈèÍçáÇÕÅAExtensionElements ÇÃêVǵǢÉtÉBÅ[ÉãÉhÇçÏê¨Ç∑ÇÈï˚ñ@Ç™ÇÌÇ©ÇÁǻǢÇΩÇflÅAExtensionTableHandlerProc ÇÕé©êgÇçÌèúÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
DZÇÃç\ë¢ëÃÇÕÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉì‡ïîÇ≈égópÇ≥ÇÍÅAÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈ ExtensionTableHandlerProc ÇÃåƒÇ—èoǵÇ≤ÇΔÇ…ìnÇ≥ÇÍÇ‹Ç∑ÅB
ExtensionElement ç\ë¢ëÃ
ExtensionElement ç\ë¢ëÃÇÕÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ™ÉçÅ[Éh/é¿çsÇ∑ÇÈå¬ÅXÇÃÉVÉXÉeÉÄã@î\ägí£Ç…ǬǢǃÇÃèÓïÒÇäiî[Ç∑ÇÈÇΩÇflÇ…égópǵNjÇ∑ÅB
struct ExtensionElement {
Str31 fileName; /* ÉtÉ@ÉCÉãñº */ long parentDirID; /* ÉtÉ@ÉCÉãÇÃêeÉfÉBÉåÉNÉgÉäÇà ID */ /* DZDZǩÇÁÇÕ HParamBlockRec.fileParam ÉoÉäÉAÉìÉgÇà ioNamePtr à»ç~ÇÃLJÇÃÇ∑Ç◊ǃǙì¸ÇÈ */ short ioVRefNum; /* èÌÇ…é¿É{ÉäÉÖÅ[ÉÄéQèΔî‘çÜ */ /* (ÉfÉtÉHÉãÉgÇ≈ÇÕÉhÉâÉCÉuÇ≈ÇÕǻǢÅAÇ‹ÇΩÇÕçÏãΔíÜÇà dirID) */ short ioFRefNum;
SInt8 ioFVersNum;
SInt8 filler1;
short ioFDirIndex; /* ÉeÅ[ÉuÉãì‡Ç≈ÇÕèÌÇ… 0 */ SInt8 ioFlAttrib;
SInt8 ioFlVersNum;
FInfo ioFlFndrInfo;
long ioDirID;
unsigned short ioFlStBlk;
long ioFlLgLen;
long ioFlPyLen;
unsigned short ioFlRStBlk;
long ioFlRLgLen;
long ioFlRPyLen;
unsigned long ioFlCrDat;
unsigned long ioFlMdDat;
};
typedef struct ExtensionElement ExtensionElement;
typedef ExtensionElement * ExtensionElementPtr;
ç≈èâÇà 2 ǬÇÃóvëfÇÕå¬ï ÇÃÉtÉ@ÉCÉãÇéØï ǵNjÇ∑ÅBécÇËÇÃóvëfÇÕ HParamBlockRec Çà fileParam ÉoÉäÉAÉìÉgÇ©ÇÁíºê⁄ÉRÉsÅ[Ç≥ÇÍÇ‹Ç∑ÅB
ExtensionElement ÇÕÅAÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ™ã@î\ägí£ÉtÉHÉãÉ_ÅAÉRÉìÉgÉçÅ[ÉãÉpÉlÉãÉtÉHÉãÉ_ÅAÉVÉXÉeÉÄÉtÉHÉãÉ_Ç≈å©Ç¬ÇØÇΩäeÉVÉXÉeÉÄã@î\ägí£Ç…ǬǢǃçÏê¨Ç≥ÇÍÇ‹Ç∑ÅBçÏê¨Ç≥ÇÍÇΩ ExtensionElement ÇÕ ExtensionTable Ç…Ç‹ÇΔÇflÇÁÇÍÇ‹Ç∑ÅB
ExtensionElementPtr ÇÕÅAÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈäe ExtensionNotificationProc ÇÃåƒÇ—èoǵÇ≤ÇΔÇ…ÅAÉpÉâÉÅÅ[É^ÇΔǵǃìnÇ≥ÇÍÇ‹Ç∑ÅBDZÇÍÇ™éwÇ∑ ExtensionElement Ç…ÇÕÅAåªç›ÉçÅ[Éh/é¿çsíÜÇÃÉVÉXÉeÉÄã@î\ägí£Ç…ëŒâûÇ∑ÇÈ ExtensionElement ÇÃÉRÉsÅ[Ç™ì¸ÇËÇ‹Ç∑ÅB
ã@î\ägí£í ímÉÅÉbÉZÅ[ÉWÉRÅ[Éh
ExtensionNotificationProc Ç‹ÇΩÇÕ ExtensionTableHandlerProc Ç…ÇÕåƒÇ—èoǵÇÃç€ÅAà»â∫ÇÃÉÅÉbÉZÅ[ÉWÉpÉâÉÅÅ[É^Ç™ìnÇ≥ÇÍÇ‹Ç∑ÅB
enum {
extNotificationBeforeFirst = 0, /* ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhäJénëO */ extNotificationAfterLast = 1, /* ëSÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhäÆóπå„ */ extNotificationBeforeCurrent = 2, /* extElementIndex Ç™é¶Ç∑ÉVÉXÉeÉÄ */ /* ã@î\ägí£ÇÃÉçÅ[ÉhëO */ extNotificationAfterCurrent = 3 /* extElementIndex Ç™é¶Ç∑ÉVÉXÉeÉÄ */ /* ã@î\ägí£ÇÃÉçÅ[Éhå„ */};
ExtensionNotificationProc
pascal void MyExtensionNotificationProc( UInt32 message, void *reserved,
ExtensionElementPtr extElement );
message ì¸óÕ 4 ǬÇà ExtensionNotification ÉÅÉbÉZÅ[ÉWÉRÅ[ÉhÇà 1 Ǭ
reserved è´óàÇÃÇΩÇfló\ñÒ
extElement ì¸óÕ åªç›ÉçÅ[Éh/é¿çsíÜÇÃÉVÉXÉeÉÄã@î\ägí£Çà ExtensionElement ÇÃÉRÉsÅ[
íçà”:
extElement ÇÕÅAextNotificationBeforeFirst ÇΔ extNotificationAfterLast ÉÅÉbÉZÅ[ÉWÇ≈ÇÕñ≥å¯Ç≈Ç∑ÅB |
ExtensionNotificationProc ÇÕÅAåªç›ÉçÅ[ÉhíÜÇÃÉVÉXÉeÉÄã@î\ägí£Ç…ëŒâûÇ∑ÇÈ ExtensionElement ÇÃÉRÉsÅ[ÇéwÇ∑ ExtensionElementPtr ÇéÛÇØéÊÇËÇ‹Ç∑ÅB
íçà”:
ExtensionElement ÇÃÉfÅ[É^ÇÕïœçXÇ≈Ç´Ç‹ÇπÇÒÅBïœçXÇçsÇ¡ÇΩDžǵǃLJÅAExtensionElement ÇÃÉRÉsÅ[ÇïœçXǵǃǢÇÈÇ…Ç∑ǨNjÇπÇÒÅBExtensionNotificationProc ÇÃñflÇËÇ≈ïœçXÇÕîjä¸Ç≥ÇÍÇ‹Ç∑ÅB |
ExtensionNotificationProc ÇÕÇ¢Ç≠ǬÇ≈LJÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
íçà”:
ExtensionNotificationProc ÇÕ RemoveExtensionNotificationProc ÇåƒÇ—èoÇ∑DZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅBExtensionNotificationProc Ç™é©êgÇçÌèúÇ∑ÇÈïKóvǙdžÇÈèÍçáÇÕÅAó·Ç¶ÇŒÅANotification Manager É^ÉXÉNÇÉCÉìÉXÉgÅ[ÉãǵǃÅAå„Ç≈ǪÇÃÉ^ÉXÉNÇÃǻǩÇ≈ ExtensionNotificationProc ÇçÌèúÇ∑ÇÈǻǫÇÃï˚ñ@ÇéÊÇÁÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB |
ExtensionTableHandlerProc
pascal void MyExtensionTableHandlerProc( UInt32 message, void *reserved,
ExtensionTableHandle extTableHandle );
message ì¸óÕ 4 ǬÇà ExtensionNotification ÉÅÉbÉZÅ[ÉWÉRÅ[ÉhÇà 1 Ǭ
reserved è´óàÇÃÇΩÇfló\ñÒ
extTableHandle ì¸óÕ ÉçÅ[Éhó\íËÇÃÇ∑Ç◊ǃÇÃÉVÉXÉeÉÄã@î\ägí£Çä‹Çfi
ExtensionTableHandlerProc ÇÕÅAãNìÆéûÇ…ÉXÉ^Å[ÉgÉ}ÉlÅ[ÉWÉÉÇ™çÏê¨ÇµÇΩ ExtensionTable Ç÷ÇÃÉnÉìÉhÉãÇéÛÇØéÊÇËÇ‹Ç∑ÅBExtensionTableHandlerProc Ç™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇÈÇΔÅAÉVÉXÉeÉÄÇÃÉfÉtÉHÉãÉgÉnÉìÉhÉâÇÕ ExtensionTable ÇÃä«óùÇǪÇÍà»è„çsǢNjÇπÇÒÅBExtensionTableHandlerProc ÇÕÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈä‘ÅAÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[Éh/é¿çsÇÃä‘Ç… extElementIndex ÉtÉBÅ[ÉãÉhÇ™é©ìÆìIÇ…çXêVÇ≥ÇÍÇÈDZÇΔÇèúǢǃÇÕÅAExtensionTable Ç…ëŒÇ∑ÇÈÇ∑Ç◊ǃÇÃïœçXÇçsǧê”îCǙdžÇËÇ‹Ç∑ÅB
íçà”:
ExtensionTableHandlerProc ÇÃÉCÉìÉXÉgÅ[Éãå„Ç…ÅAExtensionTable Ç‹ÇΩÇÕǪÇÍÇ…ä‹Ç‹ÇÍÇÈÉtÉHÉãÉ_ÇÃì‡óeÇ™ïœçXÇ≥ÇÍÇΩèÍçáÅARemoveExtensionTableHandlerProc ÇåƒÇ—èoÇ∑DZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅB |
extElementIndex ÉtÉBÅ[ÉãÉhÇÕÅAExtensionTableHandlerProc Ç™ extNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇΩÇ∑ÇÆå„Ç…ÅAñàâÒéüÇà ExtensionElement ÇéwÇ∑ÇÊǧÉCÉìÉfÉbÉNÉXÇÃílÇ™çXêVÇ≥ÇÍÇ‹Ç∑ÅB
åxçê:
ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhÇêßå‰ÇµÇƒÇ¢ÇÈèÍçáÅAExtensionElement ÇéwÇ∑ ExtensionTable.extElements[extElementIndex] ÇÃílÇïœçXÇ∑ÇÈóBàÍà¿ëSÇ»éûì_ÇÕÅAExtensionTableHandlerProc Ç™ extNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´Ç≈Ç∑ÅBëºÇÃéûì_Ç≈ ExtensionTable Ç‚ extElementIndex ÇïœçXǵǃLJǩNjǢNjÇπÇÒÇ™ÅAǪÇÃèÍçáÇÕÅAExtensionTable.extElements[extElementIndex] Ç™ìØÇ∂ ExtensionElement ÇéwÇ∑ÇÊǧíçà”ÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB |
ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈ ExtensionTableHandlerProc ÇÕèÌÇ…ÅAextNotificationBeforeFirst Ç®ÇÊÇ— extNotificationBeforeCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈç≈èâÇÃÉnÉìÉhÉâÇ≈Ç∑ÅBÇ‹ÇΩÅAExtensionTableHandlerProc ÇÕÅAextNotificationAfterLast Ç®ÇÊÇ— extNotificationAfterCurrent ÉÅÉbÉZÅ[ÉWÇ≈åƒÇ—èoÇ≥ÇÍÇÈç≈å„ÇÃÉnÉìÉhÉâÇ≈Ç∑ÅB
ÉCÉìÉXÉgÅ[ÉãÇ≈Ç´ÇÈ ExtensionTableHandlerProc ÇÕ 1 Ç¬ÇæÇØÇ≈Ç∑ÅB
InstallExtensionNotificationProc
OSErr InstallExtensionNotificationProc( ExtensionNotificationUPP extNotificationProc )
ÉpÉâÉÅÅ[É^:
extNotificationProc ì¸óÕ ÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈ ExtensionNotificationUPP
åãâ :
noErr 0 ExtensionNotificationUPP ÇÕÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍNjǵÇΩ
paramErr -50 ExtensionNotificationUPP ÇÕÇ∑Ç≈Ç…ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢNjÇ∑
memFullErr -108 ExtensionNotificationUPP ÇÉCÉìÉXÉgÅ[ÉãÇ≈Ç´ÇÈÉÅÉÇÉäǙdžÇËÇ‹ÇπÇÒ
ExtensionNotificationUPP ÇÉCÉìÉXÉgÅ[ÉãǵNjÇ∑ÅB
ï°êîÇà ExtensionNotificationProcs ÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
RemoveExtensionNotificationProc
OSErr RemoveExtensionNotificationProc (ExtensionNotificationUPP
extNotificationProc)
ÉpÉâÉÅÅ[É^:
extNotificationProc ì¸óÕ çÌèúÇ∑ÇÈ ExtensionNotificationUPP
åãâ :
noErr 0 ExtensionNotificationUPP Ç™çÌèúÇ≥ÇÍNjǵÇΩ
paramErr -50 ExtensionNotificationUPP Ç™å©Ç¬Ç©ÇÁǻǢǩÅARemoveExtensionNotificationProc Ç™ ExtensionNotificationProc ÇÃíÜÇ©ÇÁåƒÇ—èoÇ≥ÇÍNjǵÇΩ
ExtensionNotificationUPP ÇçÌèúǵNjÇ∑ÅB
íçà”:
ExtensionNotificationProcs ÇÕ RemoveExtensionNotificationProc ÇåƒÇ—èoÇ∑DZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅB |
InstallExtensionTableHandlerProc
OSErr InstallExtensionTableHandlerProc( ExtensionTableHandlerUPP extMgrProc,
ExtensionTableHandle * extTable)
ÉpÉâÉÅÅ[É^:
extMgrProc ì¸óÕ ÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈ ExtensionTableHandlerUPP
extTable ì¸óÕ InstallExtensionTableHandlerProc Ç…åªç›Çà ExtensionTableHandle Çï‘ǵǃLJÇÁǧÇΩÇflÇà ExtensionTableHandle Ç÷ÇÃÉ|ÉCÉìÉ^ÅBÉnÉìÉhÉãÇÕåƒÇ—èoǵë§Ç™ï€éùÇ∑ÇÈñÛÇ≈ÇÕǻǢÇÃÇ≈ÅAîjä¸ÇµÇƒÇÕÇ¢ÇØÇ‹ÇπÇÒÅBÇΩÇæÇµÅAÉeÅ[ÉuÉãì‡Çà extElementIndex ÅAextElementCount ÅAExtensionElements ÇÕïœçXÇ≈Ç´Ç‹Ç∑ÅB
åãâ :
noErr 0 ExtensionTableHandlerUPP ÇÕÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍNjǵÇΩ
paramErr -50 ï Çà ExtensionTableHandlerUPP Ç™Ç∑Ç≈Ç…ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢNjÇ∑
memFullErr -108 ExtensionTableHandlerUPP ÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈÇæÇØÇÃÉÅÉÇÉäǙdžÇËÇ‹ÇπÇÒ
ExtensionTableHandlerUPP ÇÉCÉìÉXÉgÅ[ÉãǵNjÇ∑ÅB
ÉCÉìÉXÉgÅ[ÉãÇ≈Ç´ÇÈ ExtensionTableHandlerProc ÇÕ 1 Ç¬ÇæÇØÇ≈Ç∑ÅB
RemoveExtensionTableHandlerProc
OSErr RemoveExtensionTableHandlerProc( ExtensionTableHandlerUPP extMgrProc )
ÉpÉâÉÅÅ[É^:
extMgrProc input çÌèúÇ∑ÇÈ ExtensionTableHandlerUPP
åãâ :
noErr 0 ExtensionTableHandlerUPP Ç™çÌèúÇ≥ÇÍNjǵÇΩÅB
paramErr -50 ExtensionTableHandlerUPP ÇÕÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢǻǢǩÅAåªç›Çà ExtensionTable ÇÕÅAÉIÉäÉWÉiÉãÇà ExtensionTable Ç≈ÇÕdžÇËÇ‹ÇπÇÒÅB
ExtensionNotificationUPP ÇçÌèúǵNjÇ∑ÅBǪÇÃå„ÇÕÉfÉtÉHÉãÉgÇÃÉnÉìÉhÉâÇ…êßå‰Ç™ñflÇËÇ‹Ç∑ÅB
íçà”:
ExtensionTableHandlerProc ÇÃÉCÉìÉXÉgÅ[Éãå„Ç…ÅAExtensionTable Ç‹ÇΩÇÕǪÇÍÇ…ä‹Ç‹ÇÍÇÈÉtÉHÉãÉ_ÇÃì‡óeÇ™ïœçXÇ≥ÇÍÇΩèÍçáÅARemoveExtensionTableHandlerProc ÇåƒÇ—èoÇ∑DZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅB |
Ç‹ÇΔÇfl - ã@î\ägí£ÉeÅ[ÉuÉãÉ}ÉlÅ[ÉWÉÉ
íçà”:
DZDZÇ≈íËã`Ç≥ÇÍÇΩLJÇÃÇÕÇ∑Ç◊ǃ Universal Interfaces 3.1 Ç…ì¸Ç¡ÇƒÇ¢Ç‹Ç∑ÅB |
íËêî
enum {
gestaltExtensionTableVersion = FOUR_CHAR_CODE('etbl') /* ExtensionTable ÇÃÉoÅ[ÉWÉáÉì */};
enum {
kExtensionTableVersion = 0x00000100 /* ExtensionTable ÇÃåªçsÉoÅ[ÉWÉáÉì (1.0.0) */};
/* ExtensionNotification ÉÅÉbÉZÅ[ÉWÉRÅ[Éh */
enum {
extNotificationBeforeFirst = 0, /* ÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhäJénëO */ extNotificationAfterLast = 1, /* ëSÉVÉXÉeÉÄã@î\ägí£ÇÃÉçÅ[ÉhäÆóπå„ */ extNotificationBeforeCurrent = 2, /* extElementIndex Ç™é¶Ç∑ÉVÉXÉeÉÄ */ /* ã@î\ägí£ÇÃÉçÅ[ÉhëO */ extNotificationAfterCurrent = 3 /* extElementIndex Ç™é¶Ç∑ÉVÉXÉeÉÄ */ /* ã@î\ägí£ÇÃÉçÅ[Éhå„ */};
ÉfÅ[É^å^
struct ExtensionElement {
Str31 fileName; /* ÉtÉ@ÉCÉãñº */ long parentDirID; /* ÉtÉ@ÉCÉãÇÃêeÉfÉBÉåÉNÉgÉäÇà ID */ /* DZDZǩÇÁÇÕ HParamBlockRec.fileParam ÉoÉäÉAÉìÉgÇà */ /* ioNamePtr à»ç~ÇÃLJÇÃÇ∑Ç◊ǃǙì¸ÇÈ */ short ioVRefNum; /* èÌÇ…é¿É{ÉäÉÖÅ[ÉÄéQèΔî‘çÜ */ /* (ÉfÉtÉHÉãÉgÇ≈ÇÕÉhÉâÉCÉuÇ≈ÇÕǻǢÅAÇ‹ÇΩÇÕçÏãΔíÜÇà dirID) */
short ioFRefNum;
SInt8 ioFVersNum;
SInt8 filler1;
short ioFDirIndex; /* ÉeÅ[ÉuÉãì‡Ç≈ÇÕèÌÇ… 0 */ SInt8 ioFlAttrib;
SInt8 ioFlVersNum;
FInfo ioFlFndrInfo;
long ioDirID;
unsigned short ioFlStBlk;
long ioFlLgLen;
long ioFlPyLen;
unsigned short ioFlRStBlk;
long ioFlRLgLen;
long ioFlRPyLen;
unsigned long ioFlCrDat;
unsigned long ioFlMdDat;
};
typedef struct ExtensionElement ExtensionElement;
typedef ExtensionElement * ExtensionElementPtr;
struct ExtensionTableHeader {
UInt32 extTableHeaderSize; /* ExtensionTable ÇÃÉwÉbÉ_ÇÃÉTÉCÉY */ /* offsetof(ExtensionTable,extElements[0]) ÇΔìôǵǢ */ UInt32 extTableVersion; /* ExtensionTable ÇÃåªçsÉoÅ[ÉWÉáÉì */ /* gestaltExtensionTableVersion Gestalt ÉZÉåÉNÉ^Ç™ï‘Ç∑ílÇΔìØÇ∂ */
UInt32 extElementIndex; /* ExtensionElement ÇÃåªç›ÇÃÉCÉìÉfÉbÉNÉX */ /* (ç≈èâÇÃóvëfÇÕÉ[Éç) */ UInt32 extElementSize; /* ExtensionElement ÇÃÉTÉCÉY */ UInt32 extElementCount; /* ÉeÅ[ÉuÉãíÜÇà ExtensionElement */ /* ÉåÉRÅ[ÉhÇÃå¬êî (1 Ç©ÇÁêîǶÇÈ) */};
typedef struct ExtensionTableHeader ExtensionTableHeader;
struct ExtensionTable {
ExtensionTableHeader extTableHeader; /* ExtensionTableHeader */ ExtensionElement extElements[1]; /* ÉçÅ[ÉhÇ∑ÇÈå¬ÅXÇÃã@î\ägí£Çï\Ç∑óvëf */};
typedef struct ExtensionTable ExtensionTable;
typedef ExtensionTable * ExtensionTablePtr;
typedef ExtensionTablePtr * ExtensionTableHandle;
ÉãÅ[É`Éì
OSErr InstallExtensionNotificationProc( ExtensionNotificationUPP extNotificationProc)
OSErr RemoveExtensionNotificationProc( ExtensionNotificationUPP extNotificationProc)
OSErr InstallExtensionTableHandlerProc( ExtensionTableHandlerUPP extMgrProc,
ExtensionTableHandle * extTable)
OSErr RemoveExtensionTableHandlerProc( ExtensionTableHandlerUPP extMgrProc )
åãâ ÉRÅ[Éh
noErr |
0 |
ExtensionNotificationUPP ÇÃÉCÉìÉXÉgÅ[ÉãÇ‹ÇΩÇÕçÌèúÇ™ê¨å˜ÇµÇ‹ÇµÇΩÅB |
paramErr |
-50 |
ÉpÉâÉÅÅ[É^Ç…ÉGÉâÅ[ǙdžÇËÉãÅ[É`ÉìÇÃé¿çsÇ™åpë±Ç≈Ç´Ç‹ÇπÇÒÅB |
memFullErr |
-108 |
ExtensionNotificationUPP ÇÉCÉìÉXÉgÅ[ÉãÇ‹ÇΩÇÕçÌèúÇ∑ÇÈÇΩÇflÇÃÉÅÉÇÉäǙdžÇËÇ‹ÇπÇÒÅB |
|